#include<iostream>
#include<string.h>
using namespace std;
char ma[1007][1007];
int m,n,sum=0;
int vis[1007][1007];
int d[4][2]={0,1,0,-1,1,0,-1,0};
void dfs(int x,int y,int t){
vis[x][y]=t;
for(int i=0;i<4;i++){
    int xx=x+d[i][0];
    int yy=y+d[i][1];
    if(xx>=0&&xx<m&&yy>=0&&yy<n&&vis[xx][yy]==0&&ma[xx][yy]=='#'){
        dfs(xx,yy,t);
    }
}

}
int main()
{
    memset(vis,0,sizeof(vis));
    cin>>m>>n;
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            cin>>ma[i][j];
        }
    }
    int flag1=0,flag2=0;
    for(int i=0;i<m;i++){
            int c=0;
        for(int j=0;j<n;j++){
            if(ma[i][j]=='#'){
                if(c==0||ma[i][j-1]=='.') c++;
            }
        }
        if(c>1){
            cout<<"-1"<<endl;
            return 0;
        }
        if(c==0) flag1=1;
    }
    for(int i=0;i<n;i++){
            int c=0;
        for(int j=0;j<m;j++){
            if(ma[j][i]=='#'){
                if(c==0||ma[j-1][i]=='.') c++;
            }

        }
        if(c>1){
            cout<<"-1"<<endl;
            return 0;
        }
        if(c==0) flag2=1;
    }
    if(flag1!=flag2){
        flag1=flag2=2;
    }
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            if(ma[i][j]=='#'&&vis[i][j]==0){
                    sum++;
                dfs(i,j,sum);

            }
        }
    }

    if(flag1==2) cout<<"-1"<<endl;
    else cout<<sum<<endl;
    return 0;
}
